/*
 * GeneradorDeListadoDeDirectorio.h
 *
 *  Created on: 27/10/2011
 *      Author: putaro
 */

#include <string>
#include <stdlib.h>
#include <fstream>
#define NOMBRE_PRINCIPAL_RUTAS "principalRutasDocumentos.bin"
#define NOMBRE_PUNTEROS_RUTAS "punterosRutasDocumentos.bin"

#ifndef GENERADORDELISTADODEDIRECTORIO_H_
#define GENERADORDELISTADODEDIRECTORIO_H_

using namespace std;

typedef struct registroPunterosRutasDocumentos {
	unsigned int idDocumento;
	unsigned int longitudRuta;
	unsigned int puntero;
}T_RegistroIndiceRutasDocumentos;

/*
 * Es una clase utilitaria que pone a disposición un método que permite generar un archivo
 * que contiene las rutas concatenadas de los archivos recuperados de un directorio
 * y un archivo que contiene los punteros a estas rutas.
 */
class GeneradorDeListadoDeDirectorio {

public:

	/*
	 * Pre: El parámetro es la rutaOrigen del directorio dónde se encuentran los archivos
	 * a indexar. El parámetro rutaDestino es el directorio donde se guardaran los
	 * archivos generados para manejar el almacenamiento de las rutas recuperadas.
	 * Ejemplo:
	 * 	rutaOrigen: "/home" "./src" "./src/Directorio"
	 * 	rutaDestino: "/home" "./src" "./src/Directorio"
	 * Post: Se retorna la cantidad de rutas de documentos recuperadas del directorio.
	*/
	static unsigned int generarListado(const string & rutaOrigen , const string & rutaDestino);

private:

	/*
	 * Pre: El parámetro ruta es la ruta del directorio dónde se encuentran los archivos
	 * a indexar. El parámetro principal esta asociado al archivo donde se guardan
	 * las rutas encadenadas. El parámetro punteros esta asociado al archivo que
	 * contiene las entradas para acceder a las rutas dadas por el número de documento.
	 * Post: Se han recuperado las rutas del directorio y se han agregado al archivo
	 * principal y se ha generado la entrada del archivo de punteros a ruta.
	 * Si se ha agregado una ruta más se incrementa el parámetro idDocumento.
	*/
	static void listarDirectorio(const string & ruta ,  ofstream &principal ,
								ofstream &punteros , unsigned int & idDocumento);

	GeneradorDeListadoDeDirectorio();
};

#endif /* GENERADORDELISTADODEDIRECTORIO_H_ */
